'''
自动存取款系统
1.账户数据源
2.登陆
3.注册
4。退出
5.查询账户余额
6.存款
7.取款
8.页面设计以及交互
'''
# 账户数据源
account_info= [
    {'user_name': 'lsl', 'pass_word': '123456', 'account': 10000},
    {'user_name':'gp','pass_word':'688688','account':10000}]
# 定义一个空列表的目的是让atm记住当前登陆的用户信息
user_list=[]

# 登陆验证函数
def login():
    # 声明user_list是全局变量，方便登陆函数添加当前登陆用户的信息给其他函数用
    global user_list
    # 等待用户输入自己的账号密码
    user_name = input('请输入用户名：')
    pass_word = input('请驶入密码：')
    # 用遍历和枚举得到一个索引序列，数据下标
    for i, user_dict in enumerate(account_info):
        # 判断用户输入的信息是否存在
        if user_dict['user_name'] == user_name and user_dict['pass_word'] == pass_word:
            # 当用户的信息存在后，把索引和user存到user_list列表中
            # user_list.append(i)
            user_list.append(user_dict)

    # 判断列表是不是为空
    if user_list != []:
        # 不为空是，代表用户输入的用户存在，则提示登陆成功
        print('{:^80}'.format('------登陆成功------\n'))
    # 否则就是没有找到用户的数据，代表密码或账户错误
    else:
        # 提示用户需不需要重新输入，输入y重新引用本函数，否则结束本函数
        if input('您输入的密码有误，是否重新输入？y/n') == 'y':
            login()



# 注册函数
def register():
    print('{:^80}'.format('------欢迎注册------\n'))
   # 用户输入想要注册的用户名
    user_name=input('请注册您的用户名：')
    for account_dic in account_info:
       # 如果用户名存在，提醒用户更换用户名
        if user_name == account_dic['user_name']:
            print('{:^80}'.format('------用户已存在，请更换用户名------\n'))
            #调用递归，用户不能输入重复的用户名
            register()
        # 用户注册密码
    pass_word1 = input('请注册您的密码（六位数字）：')
    pass_word2 = input('请再次输入您的密码：')
    if pass_word1 == pass_word2:
        print('{:^80}'.format('------注册成功------\n'))

        # 当用户成功注册后，把索引和user存到account_info列表中
        new_account={'user_name':user_name,'pass_word':pass_word1,'account':0}
        account_info.append(new_account)
    else:
        print('{:^80}'.format('------两次输入密码不一致！------\n'))



#退出函数
def logout():
    print('='*80)
    print('{:^80}'.format('------感谢您的使用，再见！------\n'))
    print('=' * 80)



# 查询账户余额函数
def balance():
    print('=' * 80)
    print('=' * 40, '您的账户余额为{:<8}元！'.format(user_list[0]['account']), '=' * 40)
    print('=' * 80)



#存款函数
def save_money():
    #将输入的数字变成浮点数
    money=float(input('请输入你要存款的金额：'))
    #如果该浮点数不是整数报错
    if money.is_integer() == False:
        print('必须输入一个整数！')
        save_money()
    else:
        user_list[0]['account']+=money
        print('=' * 80)
        print('=' * 40, '您已成功存款{:<8}元！'.format(money), '=' * 40)
        print('=' * 80)


#取款函数
def draw_money():
    # 将输入的数字变成浮点数
    money = float(input('请输入你要取款的金额：'))
    # 如果该浮点数不是整数报错
    if money.is_integer() == False:
        print('必须输入一个整数！')
        draw_money()
    # 判断取款金额是否大于账户余额，当账户余额充足，执行取款
    if user_list[0]['account'] >=money:
        user_list[0]['account'] -= money
        print('=' * 80)
        print('=' * 40, '您已成功取款{:<8}元！'.format(money), '=' * 40)
        print('=' * 80)
    # 当用户余额不足是，告知，并结束本函数
    else:
        print('=' * 80)
        print('{:^80}'.format('------账户余额不足------\n'))

        print('=' * 80)



#主函数
def main():
    #循环开始
    while True:
        #初始化用户选择界面
        print('=' * 40, 'PY_ATM_自动存取款机为您服务', '=' * 40)
        print('|{:^40}|{:^40}|'.format('1.登陆','2.注册'))
        print('|{:^40}|{:^40}|'.format('3.余额','4.存款'))
        print('|{:^40}|{:^40}|'.format('5.取款','6.退出'))
        #与用户交互
        chose=input('请输入你要选择的功能')
        #登陆
        if chose == '1':
            # 判断用户是否登陆，如已登陆就提醒，没登陆就执行登陆
            if user_list != []:
                print('=' * 40, '已经登陆，如要登陆新账户，请先退出！', '=' * 40)
            else:
                login()
        #注册
        elif chose == '2':
            register()
        #显示账户余额
        elif chose == '3':
            # 判断用户是否登陆，如未登陆就提醒，以登陆就继续执行
            if user_list == []:
                print('=' * 40, '您尚未登陆，请先登录！', '=' * 40)
            else:
                balance()
                input('按任意键返回')
        #存钱
        elif chose == '4':
            # 判断用户是否登陆，如未登陆就提醒，以登陆就继续执行
            if user_list == []:
                print('=' * 40, '您尚未登陆，请先登录！', '=' * 40)
            else:
                save_money()
                input('按任意键返回')
        #取钱
        elif chose == '5':
            # 判断用户是否登陆，如未登陆就提醒，以登陆就继续执行
            if user_list == []:
                print('=' * 40, '您尚未登陆，请先登录！', '=' * 40)
            else:
                draw_money()
                input('按任意键返回')
        #退出
        elif chose == '6':
            #前往推出函数
            logout()
            break
        else:
            #如果输入其他的指令
            print('输入指令有误，请重新输入！')

main()




















